import Config from './config';
import axios from './m-axios';
import qs from 'qs';

class Http {
  constructor() {
    this.baseRequestUrl = Config.restUrl;
  }

  request(params) {
    params.url = this.baseRequestUrl + params.url;

    if (!params.type) {
      params.type = 'get';
    }

    switch (params.type) {
      case 'get':
        this.get(params);
        break;
      case 'post':
        this.post(params);
        break;
      case 'put':
        this.put(params);
        break;
      case 'delete':
        this.delete(params);
        break;
    }
  }

  post(params) {
    axios
      .post(params.url, qs.stringify(params.params))
      .then(function(response) {
        params.sCallback && params.sCallback(response.data);
      })
      .catch(function(error) {
        params.eCallback && params.eCallback(error);
      });
  }

  get(params) {
    axios
      .get(params.url, { params: params.params })
      .then(function(response) {
        params.sCallback && params.sCallback(response.data);
      })
      .catch(function(error) {
        params.eCallback && params.eCallback(error);
      });
  }

  put(params) {
    axios
      .put(params.url, params.params)
      .then(function(response) {
        params.sCallback && params.sCallback(response.data);
      })
      .catch(function(error) {
        params.eCallback && params.eCallback(error);
      });
  }

  delete(params) {
    axios
      .delete(params.url)
      .then(function(response) {
        params.sCallback && params.sCallback(response.data);
      })
      .catch(function(error) {
        params.eCallback && params.eCallback(error);
      });
  }
}

export default new Http();
